package br.ucb.rest.negocio.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;

import org.apache.log4j.Logger;

import br.ucb.rest.negocio.AbstractBusinessObject;
import br.ucb.rest.persistencia.dao.GenericDAO;
import br.ucb.rest.persistencia.vo.CardapioVO;

public class CardapioBOS extends AbstractBusinessObject {
	private static CardapioBOS instance;
	private Logger logger = Logger.getLogger(CardapioBOS.class);
	
	private CardapioBOS() {
		super();
		logger.info("Singleton instanciado com sucesso!");
	}
	
	public static CardapioBOS getInstance() {
		if (instance == null) {
			instance = new CardapioBOS();
		}
		return instance;
	}
	
	public List<CardapioVO> recuperarPorCategoria(Integer nuCategoria) {
		EntityManager em = emf.createEntityManager();
		GenericDAO dao = GenericDAO.getInstance(em);
		try {
			Map<String, Object> parametros = new HashMap<String, Object>(1);
			parametros.put("nuCategoria", nuCategoria);
			
			List<CardapioVO> colTemp = (List<CardapioVO>) dao.namedQueryListaResultados("CardapioVO.recuperarPorCategoria", parametros);
			List<CardapioVO> retorno = new ArrayList<CardapioVO>(colTemp.size());
			for (CardapioVO item : colTemp) {
				item.setSugestaoAcompanhamento((CardapioVO) dao.doFindByKey(CardapioVO.class, item.getSugestaoAcompanhamento().getNuCardapio()));
				retorno.add(item);
			}
			colTemp = null;
			return retorno;
			
		}catch (Exception e) {
			logger.error("Ocorreu um erro ao buscar registros no banco de dados!", e);
			return null;
		}finally {
			GenericDAO.liberarInstancia();
			em.close();
		}
	}
	
	public byte[] recuperarFoto(Integer nuCardapio) {
		EntityManager em = emf.createEntityManager();
		GenericDAO dao = GenericDAO.getInstance(em);
		try {
			
			Map<String, Object> parametros = new HashMap<String, Object>(1);
			parametros.put("nuCardapio", nuCardapio);
			
			byte[] retorno = (byte[]) dao.namedQueryResultadoUnico("CardapioVO.recuperarFoto", parametros);
			
			return retorno;
		}catch (Exception e) {
			logger.error("Ocorreu um erro ao buscar registros no banco de dados!", e);
			return null;
		}finally {
			GenericDAO.liberarInstancia();
			em.close();
		}
			
	}
	public CardapioVO recuperarPorId(Integer nuCardapio) {
		EntityManager em = emf.createEntityManager();
		GenericDAO dao = GenericDAO.getInstance(em);
		try {
			CardapioVO retorno = (CardapioVO) dao.doFindByKey(CardapioVO.class, nuCardapio);
			retorno.setSugestaoAcompanhamento((CardapioVO) dao.doFindByKey(CardapioVO.class, retorno.getSugestaoAcompanhamento().getNuCardapio()));
			return retorno;
		}catch (Exception e) {
			logger.error("Ocorreu um erro ao buscar registros no banco de dados!", e);
			return null;
		}finally {
			GenericDAO.liberarInstancia();
			em.close();
		}
		
	}

}
